/**
 * Copyright (C) 2017-2018 pinganfang, Inc. All Rights Reserved.
 */
package com.pingan.haofang.searchcloud.indexdatasource.service;

import com.pingan.haofang.searchcloud.common.domain.BaseDomain;
import com.pingan.haofang.searchcloud.common.domain.IdGetter;
import com.pingan.haofang.searchcloud.index.constants.IndexDataSourceType;
import com.pingan.haofang.searchcloud.index.constants.IndexDatasourceStatus;
import com.pingan.haofang.searchcloud.indexdatasource.domain.IndexDatasourceRpc;

import java.util.List;
import java.util.Set;

/**
 * 各数据源操作门面
 *
 * @author huhailiang937
 * @date 2017年5月11日下午5:51:55
 * @since 1.0.0
 */
public interface ImportDatasourceFacadeService {

    /**
     * 获取数据源
     *
     * @param id                  子数据源ID
     * @param status              状态
     * @param indexDataSourceType 数据源类型
     * @param <E>                 泛型
     * @return
     */
    <E extends BaseDomain> E findByIdAndStatus(Long id, int status, IndexDataSourceType indexDataSourceType);

    /**
     * 修改数据源状态
     *
     * @param id                  子数据源ID
     * @param status              状态
     * @param opId                操作人ID
     * @param indexDataSourceType 数据源类型
     */
    void updateStatus(Long id, int status, Long opId, IndexDataSourceType indexDataSourceType);

    /**
     * 存储数据源
     *
     * @param datasource          数据源实体
     * @param indexDataSourceType 数据源类型
     * @return
     */
    IdGetter<Long> saveAndFlush(IdGetter<Long> datasource, IndexDataSourceType indexDataSourceType);

    /**
     * 根据数据源ID和状态获取列表
     *
     * @param idList              数据源Id列表
     * @param status              状态
     * @param indexDataSourceType 数据源类型
     * @return
     */
    List<? extends BaseDomain> findByIdsAndStatus(Set<Long> idList, IndexDatasourceStatus status
            , IndexDataSourceType indexDataSourceType);
}